package com.itheima.stock.mapper;

import com.itheima.stock.pojo.domain.Stock4EvrDayDomain;
import com.itheima.stock.pojo.domain.Stock4MinuteDomain;
import com.itheima.stock.pojo.domain.StockBlockDomain;
import com.itheima.stock.pojo.domain.StockUpdownDomain;
import com.itheima.stock.pojo.entity.StockRtInfo;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
* @author 12307
* @description 针对表【stock_rt_info(个股详情信息表)】的数据库操作Mapper
* @createDate 2024-08-06 16:56:17
* @Entity com.itheima.stock.pojo.entity.StockRtInfo
*/
public interface StockRtInfoMapper {

    int deleteByPrimaryKey(Long id);

    int insert(StockRtInfo record);

    int insertSelective(StockRtInfo record);

    StockRtInfo selectByPrimaryKey(Long id);

    int updateByPrimaryKeySelective(StockRtInfo record);

    int updateByPrimaryKey(StockRtInfo record);


    /**
     * ”涨幅榜更多查询“查询指定时间点下股票的数据，并按照涨幅降序排序
     * @param curDate
     * @return
     */
    List<StockUpdownDomain> getNewestStockInfo(@Param("timePoint") Date curDate);



    /**
     * ”涨幅榜“最新数据，并按照涨幅排序查询
     * @param
     * @return
     */
    List<StockUpdownDomain> getStockIncreasePageInfo(Date lastDate);


    /**
     * 查询指定时间范围内每分钟涨停或者跌停的数量
     * @param openTime 开始时间
     * @param curTime 结束时间 一般开始时间和结束时间在同一天
     * @param flag 约定:1->涨停 0:->跌停
     * @return
     */
    List<Map> getStockUpdownCount(@Param("openTime") Date openTime, @Param("curTime") Date curTime, @Param("flag") int flag);


    /**
     * 统计指定时间点下，各个涨跌区间内股票的个数
     * @param avlDate
     * @return
     */
    List<Map> stockUpDownScopeCount(@Param("avlDate") Date avlDate);




    /**
     * 根据时间范围查询指定股票的交易流水
     * @param stockCode 股票code
     * @param startTime 起始时间
     * @param endTime 终止时间
     * @return
     */
    List<Stock4MinuteDomain> getStockInfoByCodeAndDate(@Param("stockCode") String stockCode,
                                                       @Param("startTime") Date startTime,
                                                       @Param("endTime") Date endTime);




    /**
     * 查询指定日期范围内指定股票每天的交易数据
     * @param stockCode 股票code
     * @param startTime 起始时间
     * @param endTime 终止时间
     * @return
     */
    List<Stock4EvrDayDomain> getStockInfo4EvrDay(@Param("stockCode") String stockCode,
                                                 @Param("startTime") Date startTime,
                                                 @Param("endTime") Date endTime);


    /**
     * 批量插入功能
     *
     * @param stockRtInfoList
     */
    int insertRtBatch(List<StockRtInfo> stockRtInfoList);


    /**
     * 根据股票编码模糊查询
     * @param searchStrFuzzy
     * @return
     */
    List<Map<String, Object>> getByCodeFuzzy(String searchStrFuzzy);


    /**
     * 功能描述：统计每周内的股票数据信息，信息包含：
     * 股票ID、 一周内最高价、 一周内最低价 、周1开盘价、周5的收盘价、
     * 整周均价、以及一周内最大交易日期（一般是周五所对应日期）
     *
     * @param code
     * @return
     */
    List<Map<String, Object>> getStockInfo4Week(@Param("code") String code,
                                                @Param("startTime") Date startTime,
                                                @Param("endTime") Date endTime);


    /**
     * 获取个股最新分时行情数据，主要包含：
     * 	开盘价、前收盘价、最新价、最高价、最低价、成交金额和成交量、交易时间信息
     * @param code
     * @return
     */
    Map<String, Object> getStockScreenTimeInfo(@Param("code") String code,
                                               @Param("startTime") Date startTime,
                                               @Param("endTime") Date endTime);



    /**
     * 个股交易流水行情数据查询--查询最新交易流水，按照交易时间降序取前10
     * @param code
     * @return
     */
    List<Map<String, Object>> getByCodeInfo(String code);

    /**
     * 股票日K线，统计时间范围内每一天的时间最大值
     * @param code
     * @return
     */
    List<Date> getMxTime4EvryDay(String code, Date startTime, Date endTime);

    /**
     * 股票日K线，根据已经统计出的日期范围内每天最大值，得到每日数据
     * @param code
     * @return
     */
    List<Stock4EvrDayDomain> getStockInfo4EvrDay2(String code, List<Date> mxTimes);
}
